﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FlyingCircusWebIS.Models
{
    public class Reserva
    {
        private int idReserva;
        private int numAssento;
        private Decimal precoReserva;
        private DateTime dataVenda;

        // Chaves estrangeiras
        private int idPessoaCliente;
        private int idVoo;
        private string codCupom;
        private int idPagamento;


        // Composição de classes
        public Pessoa PessoaCliente { get; set; }
        public Voo Voo { get; set; }
        public Cupom Cupom { get; set; }
        public FormaPagamento FormaPagamento { get; set; }


        /* Indica se pode cancelar a reserva
         * --
         * Só poderá ser cancelada em até 1 dia de antedecendia da partida do voo em questão
         */
        public bool PermitirCancelar 
        {
            get 
            {
                DateTime diaAmanha = DateTime.Now.AddDays(1);
                return (Voo.DataPartida.CompareTo(diaAmanha) > 0);
            }    
        }


        public int IdReserva
        {
            get { return idReserva; }
            set 
            {
                idReserva = value;
            }
        }

        public int NumAssento
        {
            get { return numAssento; }
            set
            {
                numAssento = value;
            }
        }

        public Decimal PrecoReserva
        {
            get { return precoReserva; }
            set
            {
                precoReserva = value;
            }
        }

        public DateTime DataVenda
        {
            get { return dataVenda; }
            set
            {
                dataVenda = value;
            }
        }

        public int IdPessoaCliente
        {
            get { return idPessoaCliente; }
            set
            {
                idPessoaCliente = value;
            }
        }

        public int IdVoo
        {
            get { return idVoo; }
            set
            {
                idVoo = value;
            }
        }

        public string CodCupom
        {
            get { return codCupom; }
            set
            {
                codCupom = value;
            }
        }

        public int IdPagamento
        {
            get { return idPagamento; }
            set
            {
                idPagamento = value;
            }
        }


    }

    /**
     * Representa a tabela de que faz log das reservas
     * Ela deve ser utilizada na aplicação apenas para propósitos de leitura (read)
     */
    public class LogReserva
    {
        public DateTime DataModificacao { get; set; }
        public string TipoModificacao { get; set; }
        public int IdReserva { get; set; }
        public int NumAssento { get; set; }
        public Decimal PrecoReserva { get; set; }
        public DateTime DataVenda { get; set; }
        public int IdPessoaCliente { get; set; }
        public int IdVoo { get; set; }
        public string CodCupom { get; set; }
        public int IdPagamento { get; set; }

        /**
         * Composição
         * Outras entidades que estão relacionadas e podem ser uteis para um master detail 
         */
        public Pessoa PessoaCliente { get; set; }
        public Voo Voo { get; set; }
        public FormaPagamento FormaPagamento { get; set; }
    }

}